/**
 * 金牛座 - SQL Server数据库配置示例
 * 本配置文件展示了使用SQL Server数据库时的完整配置选项
 */
module.exports = {
    /**
     * 数据库配置
     * 指定数据库类型和连接信息
     */
    database: {
        // 数据库类型: 'mssql' 表示SQL Server数据库
        type: 'mssql',

        // 数据库连接信息
        connection: {
            server: 'localhost',          // 数据库服务器名称
            port: 1433,                   // SQL Server默认端口
            user: 'sa',                   // 数据库用户名
            password: 'your_password',    // 数据库密码
            database: 'your_database',    // 数据库名称

            // 可选: 连接选项
            options: {
                encrypt: true,              // 是否加密连接
                trustServerCertificate: true, // 信任自签名证书
                enableArithAbort: true,     // 启用算术异常中止
                instanceName: '',           // 实例名称(如果使用命名实例)
                connectTimeout: 15000,      // 连接超时(毫秒)
                requestTimeout: 15000,      // 请求超时(毫秒)
                cancelTimeout: 5000         // 取消超时(毫秒)
            },

            // 可选: 连接池配置
            pool: {
                min: 0,                     // 最小连接数
                max: 10,                    // 最大连接数
                idleTimeoutMillis: 30000    // 连接空闲超时(毫秒)
            }
        },

        // 调试模式，设置为true时将输出SQL语句
        debug: false,

        // SQL Server特定配置
        sqlserver: {
            // 默认Schema
            schema: 'dbo',

            // 是否使用Windows身份验证(如果为true，则忽略user和password)
            windowsAuth: false,

            // 是否启用SQL Server特定查询优化
            enableOptimization: true,

            // 是否使用存储过程进行操作
            useStoredProcedures: false,

            // 是否检索注释
            fetchComments: true,

            // 是否使用表值参数
            useTableValuedParameters: true
        }
    },

    /**
     * 表配置
     * 控制要包含或排除哪些表
     */
    tables: {
        // 需要包含的表 (使用正则表达式)
        include: [
            '.*'                          // 默认包含所有表
        ],

        // 需要排除的表 (使用正则表达式)
        exclude: [
            'sys.*',                      // 排除系统表
            'INFORMATION_SCHEMA.*',       // 排除信息模式表
            'msdb.*',                     // 排除msdb表
            '.*_Temp',                    // 排除临时表
            '.*_Log'                      // 排除日志表
        ],

        // 特定表的自定义属性
        custom: {
            // 客户表的自定义配置
            'Customers': {
                title: '客户信息',          // 表的显示标题
                description: '存储所有客户的基本信息和联系方式', // 表描述
                displayField: 'CustomerName', // 表的显示字段
                ordering: 1,                // 表的显示顺序
                excludeFields: ['CreditCard', 'Password'] // 排除敏感字段
            },

            // 产品表的自定义配置
            'Products': {
                title: '产品信息',          // 表的显示标题
                description: '存储所有产品的详细信息', // 表描述
                displayField: 'ProductName', // 表的显示字段
                ordering: 2,                // 表的显示顺序

                // 自定义字段属性
                customFields: {
                    'UnitPrice': {
                        label: '单价',          // 字段显示标签
                        description: '产品的单位价格(元)', // 字段描述
                        rules: 'required|numeric|min:0' // 验证规则
                    }
                }
            }
        }
    },

    /**
     * 输出配置
     * 控制生成的文件夹和文件
     */
    output: {
        // 基础输出目录
        baseDir: './output',

        // 文档输出目录 (相对于baseDir)
        docsDir: 'tables',

        // 类型定义输出目录 (相对于baseDir)
        typesDir: 'types',

        // 示例输出目录 (相对于baseDir)
        examplesDir: 'examples',

        // 是否清除输出目录
        clean: false,

        // 是否保留现有文件
        preserveFiles: true,

        // 是否创建目录
        createDirs: true
    },

    /**
     * 文档生成配置
     * 控制Markdown文档输出选项
     */
    docGeneration: {
        // 文档格式 (目前支持 'markdown')
        format: 'markdown',

        // 是否包含表的详细信息
        includeTableDetails: true,

        // 是否包含字段的详细信息
        includeFieldDetails: true,

        // 是否包含索引信息
        includeIndexes: true,

        // 是否包含表关系信息
        includeRelations: true,

        // 是否包含API示例
        includeAPIExamples: true,

        // 是否包含额外的表注释
        includeComments: true,

        // 表标题模板 (支持Handlebars语法)
        titleTemplate: '{{tableComment}} ({{tableName}})'
    },

    /**
     * 类型生成配置
     * 控制TypeScript类型定义生成
     */
    typeGeneration: {
        // 接口前缀
        interfacePrefix: 'I',

        // 是否使用字符串类型表示大整数
        useStringForBigInt: true,

        // 是否生成只读属性
        readonly: false,

        // 是否生成查询参数接口
        generateQueryInterfaces: true,

        // 是否生成分页结果接口
        generatePaginationInterfaces: true,

        // 是否生成常量定义
        generateConstants: true,

        // 是否生成API路径
        generateApiPaths: true,

        // 自定义类型映射 (SQL Server类型 => TypeScript类型)
        typeMapping: {
            // 数值类型
            'int': 'number',
            'bigint': 'string',          // 使用字符串避免精度问题
            'smallint': 'number',
            'tinyint': 'number',
            'decimal': 'number',
            'numeric': 'number',
            'money': 'number',
            'smallmoney': 'number',
            'float': 'number',
            'real': 'number',

            // 字符类型
            'char': 'string',
            'varchar': 'string',
            'text': 'string',
            'nchar': 'string',
            'nvarchar': 'string',
            'ntext': 'string',

            // 日期/时间类型
            'date': 'Date',
            'time': 'string',
            'datetime': 'Date',
            'datetime2': 'Date',
            'datetimeoffset': 'Date',
            'smalldatetime': 'Date',

            // 二进制类型
            'binary': 'Buffer',
            'varbinary': 'Buffer',
            'image': 'Buffer',

            // 布尔类型
            'bit': 'boolean',

            // 其他类型
            'uniqueidentifier': 'string', // GUID/UUID
            'xml': 'string',
            'sql_variant': 'any',
            'hierarchyid': 'string',
            'geometry': 'any',
            'geography': 'any',

            // JSON支持 (SQL Server 2016+)
            'json': 'any'
        }
    },

    /**
     * 缓存配置
     * 控制数据缓存选项
     */
    cache: {
        // 是否启用缓存
        enabled: true,

        // 缓存目录
        cacheDir: '.cache',

        // 缓存生存时间(秒)
        ttl: 3600
    },

    /**
     * 日志配置
     * 控制日志输出
     */
    logging: {
        // 日志级别: 'debug', 'info', 'warn', 'error'
        level: 'info',

        // 是否在控制台输出
        console: true,

        // 是否记录到文件
        file: true,

        // 日志文件路径
        filePath: 'logs/jinniuzhuo.log',

        // 是否包含时间戳
        timestamp: true
    },

    /**
     * 性能配置
     * 控制生成性能选项
     */
    performance: {
        // 是否启用并发表处理
        concurrentTables: true,

        // 最大并发数
        maxConcurrent: 5,

        // 是否启用增量生成
        incrementalGeneration: true
    },

    /**
     * 高级配置
     * 自定义模板和扩展选项
     */
    advanced: {
        // 自定义模板目录
        templatesDir: 'my-templates',

        // 模板引擎 (默认: 'handlebars')
        templateEngine: 'handlebars',

        // HTTP API选项
        httpApi: {
            // 基础URL前缀
            baseUrl: '/jinniuzhuo/api',

            // 是否启用CORS
            cors: true,

            // 是否生成完整API文档
            generateSwagger: true,

            // Swagger文档输出路径
            swaggerPath: 'api-docs/swagger.json'
        },

        // 是否启用SQL Server特定功能
        sqlServerFeatures: {
            // 是否支持存储过程
            storedProcedures: true,

            // 是否支持用户定义函数
            userDefinedFunctions: true,

            // 是否支持视图
            views: true,

            // 是否支持触发器
            triggers: false,

            // 是否启用表类型支持
            tableTypes: true,

            // 是否支持空间数据
            spatialData: false,

            // 是否支持JSON操作(SQL Server 2016+)
            jsonSupport: true,

            // 是否支持变更跟踪
            changeTracking: false
        }
    }
}; 